<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>06函数</title>
</head>
<body>
<script>
    //1.JS通过function关键字来定义函数
    function f1(){
        console.log('你好!白色情人节!');
    }
    f1();//调用函数

    //2.函数的形参不需要写类型,只需要写形参名即可
    function f2(n){
        console.log('幸运数字:'+n);
    }
    f2(666);

    function f3(a,b){
        console.log(a)
        console.log(b)
        console.log(a+b);
    }
    f3(1,1);//2
    //如果实参个数小于形参个数,未被赋值的形参值为undefined
    f3(10);//10+undefined=NaN(Not a Number)表示无法得到数值类型的结果
    //如果实参个数大于形参个数,多余的实参会被舍弃
    f3(10,20,30);//30

    //arguments用来保存调用函数时传入的实参
    function f4(){
        console.log(arguments);
    }
    f4(50);
    f4(50,60);
    f4(50,60,70);

    //使用return关键字返回结果
    function f5(x,y){
        return x-y;
    }
    let res = f5(10,8);//将函数执行结果保存在res变量中
    console.log(res);//打印res变量保存的值
    console.log(f5(10,8));//直接打印方法的调用结果

    //第二种定义JS函数的方式
    //变量f6保存了函数的所有内容,变量名f6就相当于函数的名字,可以直接调用
    let f6 = function(){
        return 666;
    }
    console.log(f6());//666
    console.log(typeof f6);//function
    console.log(f6);//ƒ (){return 666;}

    //第三种定义函数的方式
    //new Function(参数1,参数2,方法体);
    // let f7 =new Function("name","age","console.log(name+'hhhh'+age)");
    //如果有返回值,也是一样的,都是字符串的形式
    let f7 =new Function("name","age","console.log('方法体');return age;");
    console.log(f7('张三',20));
</script>
</body>
</html>